home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Screenblankers / XSB / popup.c < prev    next >
C/C++ Source or Header  |  1996-09-26  |  7KB  |  240 lines

  1. #include "startup.h"
  2. #include "xsb.h"
  3.  
  4. struct Window *w;
  5. struct RastPort *rp;
  6. struct Gadget *glist;
  7.  
  8. void brokeron(void);
  9. void brokeroff(void);
  10. void doblank(char*);
  11. void doprefs(char*);
  12.  
  13. extern struct Library *XSBBase;
  14.  
  15. extern char popkey[],hotkey[],xsbname[];
  16. long blankmouse,mousetimeout=30/5;
  17. long screentimeout=300/5,randomblanker;
  18.  
  19. static long activeblankernum;
  20.  
  21. void LockWindow(struct Window*);
  22. void UnlockWindow(struct Window*);
  23.  
  24. extern char version[];
  25.  
  26. static long __regargs slidercalc(long val)
  27. {
  28.     return(val*5);
  29. }
  30.  
  31. void loadprefs(void)
  32. {
  33.     BPTR f;
  34.  
  35.     if(f=CreateDir("ENV:XSB")) UnLock(f);
  36.     if(f=CreateDir("ENVARC:XSB")) UnLock(f);
  37.  
  38.     f=Open("ENV:XSB/XSB.prefs",MODE_OLDFILE);
  39.     if(!f) return;
  40.  
  41.     Read(f,popkey,40);
  42.     Read(f,hotkey,40);
  43.     Read(f,xsbname,30);
  44.     Read(f,&blankmouse,4);
  45.     Read(f,&mousetimeout,4);
  46.     Read(f,&screentimeout,4);
  47.     Read(f,&randomblanker,4);
  48.     Close(f);
  49. }
  50.  
  51. void saveprefs(char *name)
  52. {
  53.     BPTR f=Open(name,MODE_NEWFILE);
  54.     if(!f) return;
  55.  
  56.     Write(f,popkey,40);
  57.     Write(f,hotkey,40);
  58.     Write(f,xsbname,30);
  59.     Write(f,&blankmouse,4);
  60.     Write(f,&mousetimeout,4);
  61.     Write(f,&screentimeout,4);
  62.     Write(f,&randomblanker,4);
  63.     Write(f,version,strlen(version));
  64.     Close(f);
  65. }
  66.     
  67.  
  68. static struct List labels;
  69. static void getxsblist(void)
  70. {
  71.     char parsed[64];
  72.     struct Node *node;
  73.     char *mem,*p;
  74.     long blankercount=0;
  75.  
  76.     struct ExAllData *ead=AllocVec(8192,MEMF_CLEAR);
  77.     struct ExAllControl *eac=AllocDosObjectTagList(DOS_EXALLCONTROL,TAG_DONE);
  78.     BPTR lock=Lock("LIBS:",SHARED_LOCK);
  79.     if(!ead || !eac || !lock) goto xit;
  80.     NewList(&labels);
  81.     activeblankernum=0;
  82.     ParsePatternNoCase("XSB#?.library",parsed,64);
  83.     eac->eac_MatchString=parsed;
  84.     ExAll(lock,ead,8192,ED_NAME,eac);
  85.     if(!eac->eac_Entries) goto xit;
  86.  
  87.     while(ead) {
  88.         node=AllocVec(sizeof(struct Node),MEMF_CLEAR);
  89.         if(!stricmp(ead->ed_Name,xsbname)) activeblankernum=blankercount;
  90.         p=&ead->ed_Name[3];
  91.         while(*p!='.') p++; *p=0;
  92.         p=&ead->ed_Name[3];
  93.         mem=AllocVec(strlen(p),0);
  94.         strcpy(mem,p);
  95.         node->ln_Name=mem;
  96.         AddTail(&labels,node);
  97.         ead=ead->ed_Next;
  98.         blankercount++;
  99.     }
  100. xit:
  101.     if(ead) FreeVec(ead);
  102.     if(eac) FreeDosObject(DOS_EXALLCONTROL,eac);
  103.     if(lock) UnLock(lock);
  104. }
  105.  
  106. static void freelabels(void)
  107. {
  108.     struct Node *l;
  109.  
  110.     while(l=RemHead(&labels)) {
  111.         FreeVec(l->ln_Name);
  112.         FreeVec(l);
  113.     }
  114. }
  115.  
  116. struct Node *findnode(int num)
  117. {
  118.     struct Node *n=labels.lh_Head;
  119.     int c;
  120.  
  121.     for(c=0; c<num; c++) n=n->ln_Succ;
  122.     return(n);
  123. }
  124.  
  125. static void doblankerinfo(char *name)
  126. {
  127.     if(!(XSBBase=OldOpenLibrary(name))) {
  128.         doreq("XSBCX","Can't open blanker library\n%s","Cancel",name);
  129.         return;
  130.     }
  131.     LockWindow(w);
  132.     doreq(name,XSBGetID(),"OK");
  133.     CloseLibrary(XSBBase);
  134.     UnlockWindow(w);
  135. }
  136.  
  137.  
  138. void popup(void)
  139. {
  140.     struct IntuiMessage *im;
  141.     long code,class;
  142.     struct Gadget *g;
  143.     int running=1;
  144.     long tempblankmouse=blankmouse;
  145.     long tempmousetimeout=mousetimeout;
  146.     long tempscreentimeout=screentimeout;
  147.     long temprandomblanker=randomblanker;
  148.     char tempxsbname[40],temppopkey[40],temphotkey[40];
  149.     
  150.     strcpy(tempxsbname,xsbname);
  151.     strcpy(temphotkey,hotkey);
  152.     strcpy(temppopkey,popkey);
  153.     
  154.     getxsblist();
  155.     if(!(w=OpenWindowTags(0,
  156.         WA_Left,50,WA_Top,50,
  157.         WA_Width,450,WA_Height,175,
  158.         WA_Title,"XSBCX Setup Window",
  159.         WA_ScreenTitle,"XSBCX V1.0 (" __DATE__ ") © 1992 by Oliver Wagner, All Rights Reserved",
  160.         WA_Flags,ACTIVATE|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|REPORTMOUSE,
  161.         WA_IDCMP,CLOSEWINDOW|GADGETUP|GADGETDOWN|MOUSEMOVE,
  162.         WA_AutoAdjust,TRUE,
  163.         TAG_DONE))) return;
  164.     rp=w->RPort;
  165.     gt_init();
  166.     glist=gt_newlist();
  167.     gt_drawbox(8,15,434,40,1);
  168.     gt_drawbox(196,57,234+12,33,1);
  169.     gt_drawbox(192,57+34,234+12+4,56,1);
  170.     gt_drawbox(8,57,186,90,1);
  171.     SetAPen(rp,0);
  172.     RectFill(rp,192,57+34+1,195,57+34+1+53);
  173.  
  174.     gt_createg(40,152, 70,15, BUTTON_KIND, "Save", 0, TAG_DONE);
  175.     gt_createg(225-35,152, 70,15, BUTTON_KIND, "Use", 0, TAG_DONE);
  176.     gt_createg(340,152, 70,15, BUTTON_KIND, "Cancel", 0, TAG_DONE);
  177.  
  178.     gt_createg(105,20,328,14, STRING_KIND, "Blank Key:", NG_HIGHLABEL, GTST_String,hotkey, GTST_MaxChars,40, TAG_DONE); 
  179.     gt_createg(105,36,328,14, STRING_KIND, "Popup Key:", NG_HIGHLABEL, GTST_String,popkey, GTST_MaxChars,40, TAG_DONE); 
  180.  
  181.     gt_createg(309,62, 40,14, CHECKBOX_KIND, "Blank Mouse:", NG_HIGHLABEL, GTCB_Checked, blankmouse, TAG_DONE);
  182.     gt_createg(309,63+13, 85,10, SLIDER_KIND, "Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GTSL_Level,mousetimeout,GA_RelVerify,TRUE,TAG_DONE);
  183.  
  184.     gt_createg(309,62+33, 40,14, CHECKBOX_KIND, "Pick Random:", NG_HIGHLABEL, GTCB_Checked, randomblanker, TAG_DONE);
  185.     gt_createg(309,63+13+33, 85,10, SLIDER_KIND,"Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36*3, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GA_RelVerify,TRUE,GTSL_Level,screentimeout,TAG_DONE);
  186.  
  187.     gt_createg(220,63+33+13+18, 50,13, BUTTON_KIND, "Test", 0,TAG_DONE);
  188.     gt_createg(220+75,63+33+13+18, 50,13, BUTTON_KIND, "Info", 0,TAG_DONE);
  189.     gt_createg(220+150,63+33+13+18, 50,13, BUTTON_KIND, "Prefs", 0,TAG_DONE);
  190.  
  191.     gt_createg(20,75,160,70, LISTVIEW_KIND, "Avaible Blankers:", NG_HIGHLABEL|PLACETEXT_ABOVE, 
  192.         GTLV_Top,0,GTLV_Selected,activeblankernum,
  193.         GTLV_Labels,&labels,
  194.         GTLV_ScrollWidth,16,
  195.         GTLV_ShowSelected,0,
  196.         TAG_DONE);
  197.  
  198.     gt_endlist();
  199.  
  200.     while(running) {
  201.         while(!(im=GT_GetIMsg(w->UserPort))) WaitPort(w->UserPort);
  202.         class=im->Class;
  203.         code=im->Code;
  204.         g=im->IAddress;
  205.         GT_ReplyIMsg(im);
  206.         switch(class) {
  207.             case CLOSEWINDOW: running=0; break;
  208.             case GADGETUP: switch(g->GadgetID) {
  209.                 case 1:
  210.                 case 2: 
  211.                     strcpy(xsbname,tempxsbname);
  212.                     blankmouse=tempblankmouse;
  213.                     mousetimeout=tempmousetimeout;
  214.                     randomblanker=temprandomblanker;
  215.                     screentimeout=tempscreentimeout;
  216.                     strcpy(hotkey,gt_findstring(4));
  217.                     strcpy(popkey,gt_findstring(5));
  218.                     if(g->GadgetID==1) saveprefs("ENVARC:XSB/XSB.prefs");
  219.                     saveprefs("ENV:XSB/XSB.prefs");
  220.  
  221.                 case 3: running=0; break;
  222.                 case 4: ActivateGadget(gt_findid(5),w,0); break;
  223. /*                case 5: break;*/
  224.                 case 6: tempblankmouse=gt_findstate(6); break;
  225.                 case 7: tempmousetimeout=code; break;
  226.                 case 8: temprandomblanker=gt_findstate(8); break;
  227.                 case 9: tempscreentimeout=code; break;
  228.                 case 10: Delay(10); LockWindow(w); brokeron(); doblank(tempxsbname); brokeroff(); UnlockWindow(w); break;
  229.                 case 11: doblankerinfo(tempxsbname); break;
  230.                 case 12: LockWindow(w); doprefs(tempxsbname); UnlockWindow(w); break;
  231.                 case 13: sprintf(tempxsbname,"xsb%s.library",findnode(code)->ln_Name); break;
  232.             }
  233.         }
  234.     }
  235.  
  236.     gt_remlist(glist);
  237.     CloseWindow(w);
  238.     freelabels();
  239. }
  240.